﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IOseralize.StachHeap
{
  public  class StackHeap
    {

        /// <summary>
        /// 堆：Heap 托管堆 一个程序运行时 该进程存放引用类型变量的一块内存 全局唯一
        /// 栈Steck:数据结构  线程栈 每一个线程存放的变量和值类型的内存 随着线程的生命周期而存在; 先进后出 一个《线程>在运行的时候存放变量的内存 
        /// 
        /// 值类型分配在栈上
        /// 引用类型分配在堆上面
        /// </summary>
        /// 值类型:枚举 结构 System.ValueType 结构不能有父类 因为隐式继承ValueType
        /// 引用类型:委托 
        public static void Show()
        {
            //内存分配 线程堆 栈
            { 
            
            }
            //什么时候GC -GC什么对象： 托管资源 +引用类型：托管资源就是CLR控制的 new的对象 string字符串  变量
            //非托管对象就是CLR不能控制的 数据库链接 文件流 句柄 打印机链接

            //Using（） 被C#封装了管理了那个非托管数据库链接资源

            //释放非托管：GC 
            //只要是手动释放的都是非托管的 
            { 
               // 析构函数：被动清理
                //Dispose模式:主动清理 
               
            
            }
        }


        public class StandardDispose : IDisposable
        {
            //创建一个非托管资源：
            private string _UnManageResource = "非托管的资源";
            private string _ManagrResource = "托管的资源";
            private bool _disposed = false;





            public void Dispose()
            {
                this.Dispose(true);
                GC.SuppressFinalize(this);
            }

            public void Close() {
                this.Dispose();
            }

            protected virtual void Dispose(bool disposing)
            { 
             
            
            }
        }
    }
}
